/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;

import io.PagoDTO;
import java.util.ArrayList;
import java.sql.*;

/**
 * Esta clase representa al gestor de la tabla pago que se encuentra
 * almacenada en la base de datos.
 * @author nahuel
 */
public class MySQLPagoDAO {

    /**
     * Este método permite obtener todos los pagos de una cuota determinada
     * @param id identificador de la cuota
     * @return lista de pagos
     * @throws DAOException 
     */
    public ArrayList<PagoDTO> getPagos(int id) throws DAOException {
        Connection conexion = null;
        try {
            conexion = MySQLDAOFactory.getMySQLDAOFactory().getConexion();
            Statement stat = conexion.createStatement();
            ResultSet rs = stat.executeQuery("select * from pago where idCuota=" + id);
            ArrayList<PagoDTO> lista = new ArrayList();
            while (rs.next()) {
                PagoDTO pago = new PagoDTO(rs.getInt("id"), rs.getDate("fechaPago"), rs.getDouble("montoPagado"), rs.getString("observaciones"));
                lista.add(pago);
            }
            rs.close();
            return lista;
        } catch (SQLException e) {
            throw new DAOException("Error al leer los pagos de la cuota desde la base de datos", e);
        } finally {
            MySQLDAOFactory.getMySQLDAOFactory().cerrarConexion(conexion);
        }
    }

    /**
     * Este métod permite actualizar un pago con los datos que se le pasan como 
     * parámetro
     * @param pago a actualizar
     * @throws DAOException 
     */
    public void actualizarPago(PagoDTO pago) throws DAOException {
        Connection conexion = null;
        try {
            conexion = MySQLDAOFactory.getMySQLDAOFactory().getConexion();
            Statement stat = conexion.createStatement();
            stat.executeUpdate("update pago set fechaPago = '" + pago.getFechaPago() + "',montoPagado = " + pago.getMontoPagado() + ",observaciones = '" + pago.getObservaciones() + "' where id = " + pago.getId());
        } catch (SQLException e) {
            throw new DAOException("Error al actualizar el pago en la base de datos", e);
        } finally {
            MySQLDAOFactory.getMySQLDAOFactory().cerrarConexion(conexion);
        }
    }

    /**
     * Este método permite agregar un pago a la base de datos
     * @param pago a agregar
     * @throws DAOException 
     */
    public void agregarPago(PagoDTO pago) throws DAOException {
        Connection conexion = null;
        try {
            conexion = MySQLDAOFactory.getMySQLDAOFactory().getConexion();
            Statement stat = conexion.createStatement();
            stat.executeUpdate("insert into pago (idCuota,fechaPago,montoPagado,observaciones) values (" + pago.getId() + ",'" + pago.getFechaPago() + "'," + pago.getMontoPagado() + ",'" + pago.getObservaciones() + "')");
        } catch (SQLException e) {
            throw new DAOException("Error al insertar el pago en la base de datos", e);
        } finally {
            MySQLDAOFactory.getMySQLDAOFactory().cerrarConexion(conexion);
        }
    }
}
